﻿/*
ChangeTracking (a library for POCO change tracking).

Copyright (C) 2014 Dmitry Merzagitovich Arslanov

This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option) any
later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*/

using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace ChangeTracking
{
    internal sealed class ChangeSet
    {
        private Stack<Change> undos;

        private Stack<Change> redos;

        public ChangeSet(IEnumerable<Change> changes)
        {
            undos = new Stack<Change>(changes);
            redos = new Stack<Change>();
        }

        public void Undo()
        {
            while (undos.Count > 0)
            {
                Change change = undos.Pop();
                change.Undo();
                redos.Push(change);
            }
        }

        public void Redo()
        {
            while (redos.Count > 0)
            {
                Change change = redos.Pop();
                change.Redo();
                undos.Push(change);
            }
        }
    }
}
